import logging
import os
from datetime import datetime


def setup_logger(name='app_logger', task_id=None, log_dir='logs', level=logging.INFO):
    """
    配置并返回一个统一的日志记录器

    :param name: 日志记录器的名称
    :param task_id: 任务 ID，用于生成日志文件名
    :param log_dir: 日志文件存储目录
    :param level: 日志级别
    :return: 配置好的日志记录器
    """
    # 创建日志记录器
    logger = logging.getLogger(name)
    logger.setLevel(level)

    # 避免重复添加处理器
    if not logger.handlers:
        # 确保日志目录存在
        if not os.path.exists(log_dir):
            os.makedirs(log_dir)

        # 生成动态日志文件名
        timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
        if task_id:
            log_file = os.path.join(log_dir, f"{task_id}-{timestamp}.log")
        else:
            log_file = os.path.join(log_dir, f"{timestamp}.log")

        # 创建文件处理器，指定编码为 utf-8
        file_handler = logging.FileHandler(log_file, encoding='utf-8')
        file_handler.setLevel(level)

        # 创建控制台处理器
        console_handler = logging.StreamHandler()
        console_handler.setLevel(level)

        # 定义日志格式
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        file_handler.setFormatter(formatter)
        console_handler.setFormatter(formatter)

        # 将处理器添加到日志记录器
        logger.addHandler(file_handler)
        logger.addHandler(console_handler)

    return logger


LOGGER = setup_logger()
